package com.atguigu.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

//Documented 用于描述注解的作用，Retention用于描述注解的生命周期，Target用于描述注解可以标注的位置。
@Documented
//@Constraint 当前自定义校验器是否使用哪个校验器进行校验的，validateBy中指定校验器。
@Constraint(validatedBy = {ListValueConstraintValidator.class})
//@Target 指定当前自定义校验器可以标注在哪些位置，如METHOD方法上，FIELD字段上，构造方法、参数等
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
//@Retention当前校验注解的获取时机，RUNTIME意为我们可以在运行时获取到当前校验注解
@Retention(RUNTIME)
public @interface ListValue {
    // message () default 设置默认的校验提示信息。
//下面key为com.atguigu.common.valid.ListValue.message
    //定义在validationmessage.properties配置文件中，其value值是一个字符串。
    String message() default "{com.atguigu.common.valid.ListValue.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    //校验标注的属性值需要是vals数组中指定的范围
    int[] vals() default {};
}

